package com.example.hotel.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

    @Configuration
    @EnableSwagger2 // 开启支持Swagger2，是否加载相关配置组件
    public class MyWebConfig implements WebMvcConfigurer {

        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    // 开启Swagger2接口展示，是否允许展示页面
                    .enable(true)
                    // 配置api页面信息
                    .apiInfo(apiInfo())
                    // 配置RequestHandlerSelectors配置如何扫描接口
                    .select()
                    // 设置RequestHandlerSelectors扫描那个包下的控制器接口
                    .apis(RequestHandlerSelectors.basePackage("com.example.hotel.web"))
                    // 控制器方法上的请求映射规则，这里配的是扫描所有
                    .paths(PathSelectors.any())
                    .build();

        /*.paths()的其他值
        	PathSelectors.any() // 任何请求都扫描
            PathSelectors.none() // 任何请求都不扫描
            PathSelectors.regex(final String pathRegex) // 通过正则表达式控制
            PathSelectors.ant("/user/**") // 只加载那些/user开头的接口
        */
        }

        // 生成Api信息
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    // 页面主题
                    .title("SpringBoot整合Swagger,XX 项目接口信息")
                    // 描述
                    .description("SpringBoot整合Swagger，详细信息......")
                    // 版本
                    .version("9.0")
                    // 联系人信息 姓名、主页、邮箱
                    .contact(new Contact("lion","https://gitee.com/","651157092@qq.com"))
                    // 许可证
                    .license("Apache 2.0许可")
                    // 许可证链接
                    .licenseUrl("https://www.baidu.com")
                    // 服务说明
                    .termsOfServiceUrl("https://www.csdn.net/")
                    .build();
        }
    }

